iT邦幫忙

2026 iThome 鐵人賽

DAY 1
0
JavaScript

大學以前只看過那隻貓?用白話文帶你從 Python 跨進 JavaScript系列 第 1

丟掉滑鼠積木!Java 變數不是本體,它只是遙控器

  • 分享至 

  • xImage
  •  

大學以前,大家接觸程式可能是在生活科技課用滑鼠拖拉 Scratch 的橘貓積木,或是寫幾行簡單的 Python print("Hello World")。那時候的變數很單純,x = 10 就是把 10 裝進盒子裡。

但一進到 Java,映入眼簾的第一堵高牆通常是這行看似重複又繁瑣的程式碼
Dog myDog = new Dog();

為什麼左邊要寫 Dog,右邊又要寫一次 new Dog()?為什麼不能直接用?這行指令其實拆成了三件事: 1. 類別(Class)只是圖紙,物件(Object)才是蓋出來的房子class Dog 本身不能直接跑,它只是一張藍圖,用來規定一隻狗應該有哪些特徵(名字)和動作(汪汪叫):

  1. 類別(Class)是空白身分證,物件(Object)是你皮夾裡的那一張
    class 本身不能直接當資料拿來用,它只是一份「政府規定的身分證空白版型」。版型規定了每個人出生都必須帶有姓名、年齡等欄位(屬性),以及更換地址等流程(方法)
    屬性是證件上的文字欄位,而方法是圍繞這張證件能執行的動作(例如更新資料)
    public class Person {
    String name; // 欄位屬性:狀態
    int age;
    void introduce() { // 流程方法:行為
    System.out.println("我是 " + name + ",今年 " + age + " 歲");
    }
    }
    光有一疊空白申請表,世界上不會憑空多出一個國民。這時候就輪到 new 出場了!new 的白話意思,就是戶政人員把你的資料 Key 完後,按下製卡機的壓模列印鍵:
    申請空間就是在記憶體佔好一個位置,準備寫資料,而實體誕生就是把小明、20歲Key上去並壓印完成。
    這張剛出爐、印著你的名字與年齡的實體卡片,就是 物件(Object / 實體)
  2. 等號不是把身分證塞進變數,它只是「遙控器」這是 Java 物件導向最關鍵的觀念:變數容器裡面裝的根本不是整張身分證,它只是一張寫著身分證放哪裡的「紙條 / 遙控器」! 基本型別(int, double...):盒子裡裝的就是純數字(值本身)。 物件型別(String, 自訂 Class...):盒子裡裝的是記憶體位址(Reference / 參考)。 當你寫下等號 = 時,電腦做的事情只有一件:把剛剛 new 出來的那張身分證的記憶體地址,抄寫到左邊的變數盒子裡。手握這支抄了地址的遙控器,主程式才能順著地址對它下達指令。
  3. 換個遙控器:不是生出第二隻狗
    JavaDog myDog = new Dog();
    Dog yourDog = myDog;
    這時候記憶體裡有幾隻狗?答案依然只有一隻! 因為 yourDog = myDog 複製的不是狗狗本體,而是把地址又抄給了第二支遙控器。現在 myDog 與 yourDog 兩支遙控器都對準同一個實體。你用 yourDog 把狗的名字改成「小白」,我用 myDog 去查,名字也會變成「小白」。

下一篇
【Day 2】物件出生的第一道手續:建構子(Constructor)與 this 的妙用
系列文
大學以前只看過那隻貓?用白話文帶你從 Python 跨進 JavaScript8
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言